---
import merge from "lodash.merge";
import { AstroSeo } from "@astrolib/seo";

import type { Props as AstroSeoProps } from "@astrolib/seo";

import { SITE, METADATA, I18N } from "astrowind:config";
import type { MetaData } from "~/types";
import { getCanonical } from "~/utils/permalinks";

import { adaptOpenGraphImages } from "~/utils/images";

export interface Props extends MetaData {
  dontUseTitleTemplate?: boolean;
}

const {
  title,
  ignoreTitleTemplate = false,
  canonical = String(getCanonical(String(Astro.url.pathname))),
  robots = {},
  description,
  openGraph = {},
  twitter = {},
} = Astro.props;

const seoProps: AstroSeoProps = merge(
  {
    title: "",
    titleTemplate: "%s",
    canonical: canonical,
    noindex: true,
    nofollow: true,
    description: undefined,
    openGraph: {
      url: canonical,
      site_name: SITE?.name,
      images: [],
      locale: I18N?.language || "en",
      type: "website",
    },
    twitter: {
      cardType: openGraph?.images?.length ? "summary_large_image" : "summary",
    },
  },
  {
    title: METADATA?.title?.default,
    titleTemplate: METADATA?.title?.template,
    noindex:
      typeof METADATA?.robots?.index !== "undefined"
        ? !METADATA.robots.index
        : undefined,
    nofollow:
      typeof METADATA?.robots?.follow !== "undefined"
        ? !METADATA.robots.follow
        : undefined,
    description: METADATA?.description,
    openGraph: METADATA?.openGraph,
    twitter: METADATA?.twitter,
  },
  {
    title: title,
    titleTemplate: ignoreTitleTemplate ? "%s" : undefined,
    canonical: canonical,
    noindex: typeof robots?.index !== "undefined" ? !robots.index : undefined,
    nofollow:
      typeof robots?.follow !== "undefined" ? !robots.follow : undefined,
    description: description,
    openGraph: { url: canonical, ...openGraph },
    twitter: twitter,
  },
);
---

<AstroSeo
  {...{
    ...seoProps,
    openGraph: await adaptOpenGraphImages(seoProps?.openGraph, Astro.site),
  }}
/>
